Caching Techniques (In-memory এবং Distributed Cache)

Web Development - এএসপি ডট (ASP.Net) - অ্যাডভান্সড পারফরম্যান্স টিউনিং |
2
2

Caching হল একটি গুরুত্বপূর্ণ টেকনিক যা ওয়েব অ্যাপ্লিকেশনের পারফরম্যান্স উন্নত করতে সহায়তা করে। ক্যাশিং ব্যবহারের মাধ্যমে ডেটার পুনরায় প্রক্রিয়াকরণের প্রয়োজন কমিয়ে আনা যায়, যা সার্ভারের লোড কমাতে এবং রেসপন্স টাইম দ্রুত করতে সাহায্য করে। In-memory caching এবং distributed caching হলো দুটি প্রধান ক্যাশিং পদ্ধতি যা ASP.Net অ্যাপ্লিকেশনগুলিতে ব্যবহৃত হয়।


১. In-memory Caching

In-memory caching এমন একটি ক্যাশিং মেথড, যেখানে ডেটা সরাসরি অ্যাপ্লিকেশনের মেমরিতে সংরক্ষিত হয়। এই ক্যাশিং পদ্ধতিটি দ্রুত অ্যাক্সেস প্রদান করে এবং ডেটা পুনরায় ফেচ করার প্রয়োজনীয়তা কমায়। এটি সাধারণত ছোট বা একক সার্ভারে চালিত অ্যাপ্লিকেশনে ব্যবহৃত হয়।

In-memory Caching ব্যবহার:

ASP.Net Core এ IMemoryCache ইন্টারফেস ব্যবহার করে ইন-মেমরি ক্যাশিং করা যায়। এটি ডেটাকে মেমরিতে সঞ্চয় করে এবং পরবর্তীতে তা দ্রুত রিটার্ন করে।

Steps:

  1. IMemoryCache ইন্টারফেস ব্যবহার:

    • প্রথমে, IMemoryCache সার্ভিসটি Startup.cs এ কনফিগার করতে হবে:
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMemoryCache();  // In-memory caching enable করা
    }
    
  2. In-memory ক্যাশ ব্যবহার:

    • একটি ক্লাসে IMemoryCache ইন্টারফেস ইনজেক্ট করে ডেটা ক্যাশ করা এবং পুনরায় ক্যাশ থেকে ফেচ করা যায়।
    public class MyService
    {
        private readonly IMemoryCache _cache;
    
        public MyService(IMemoryCache cache)
        {
            _cache = cache;
        }
    
        public string GetCachedData()
        {
            if (!_cache.TryGetValue("MyKey", out string data))
            {
                // যদি ক্যাশে ডেটা না থাকে, নতুন ডেটা তৈরি করা
                data = "This is some cached data";
                // ক্যাশে ডেটা সঞ্চয় করা
                _cache.Set("MyKey", data, TimeSpan.FromMinutes(5)); // 5 মিনিট ক্যাশে রাখুন
            }
            return data;
        }
    }
    

এখানে, ক্যাশে ডেটা চেক করা হয় এবং যদি ডেটা না থাকে তবে সেটি সঞ্চয় করা হয়। TimeSpan এর মাধ্যমে ক্যাশের মেয়াদ নির্ধারণ করা যায়।


২. Distributed Caching

Distributed caching হল একটি ক্যাশিং মেথড যা একাধিক সার্ভারের মধ্যে ডেটা ভাগ করে রাখে। এটি তখন ব্যবহৃত হয় যখন অ্যাপ্লিকেশনটির স্কেল বৃদ্ধি পায় এবং একাধিক সার্ভার বা ইনস্ট্যান্সে অ্যাপ্লিকেশন চলতে থাকে। এর মাধ্যমে ডেটার একাধিক কপি সার্ভারের মধ্যে সিঙ্ক্রোনাইজ করা হয়, যাতে ক্লায়েন্ট বা সার্ভার কোথাও থেকেই ডেটা এক্সেস করা সম্ভব হয়।

Distributed caching ব্যবহার করার জন্য কিছু সাধারণ টেকনিক রয়েছে:

  • Redis
  • NCache
  • SQL Server Cache
  • Memcached

ASP.Net Core তে Redis বা SQL Server এর মাধ্যমে Distributed Caching কনফিগার করা সম্ভব।

Redis Distributed Caching ব্যবহার:

Redis হলো একটি জনপ্রিয় ডিস্ট্রিবিউটেড ক্যাশিং সল্যুশন যা দ্রুত ডেটা রিট্রিভাল এবং শেয়ারড ক্যাশিং সমর্থন করে।

Steps:

  1. Redis ইনস্টল ও কনফিগারেশন:

    • প্রথমে, Microsoft.Extensions.Caching.StackExchangeRedis প্যাকেজটি NuGet থেকে ইনস্টল করুন:
    Install-Package Microsoft.Extensions.Caching.StackExchangeRedis
    
  2. Redis কনফিগার করা:

    • Startup.cs ফাইলে Redis ক্যাশিং কনফিগার করুন:
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddStackExchangeRedisCache(options =>
        {
            options.Configuration = "localhost:6379";  // Redis সার্ভারের ঠিকানা
            options.InstanceName = "MyApp_";  // Redis ইনস্ট্যান্স নাম
        });
    }
    
  3. Redis ক্যাশ ব্যবহার:

    • IDistributedCache ইন্টারফেস ব্যবহার করে Redis ক্যাশ থেকে ডেটা রিট্রিভ বা সেট করা হয়।
    public class MyService
    {
        private readonly IDistributedCache _cache;
    
        public MyService(IDistributedCache cache)
        {
            _cache = cache;
        }
    
        public async Task<string> GetDistributedCachedDataAsync()
        {
            string data = await _cache.GetStringAsync("MyDistributedKey");
            if (data == null)
            {
                data = "This is some distributed cached data";
                await _cache.SetStringAsync("MyDistributedKey", data, new DistributedCacheEntryOptions
                {
                    AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(5) // ক্যাশে ৫ মিনিট রাখুন
                });
            }
            return data;
        }
    }
    

এখানে, ডেটা Redis ক্যাশে সঞ্চয় এবং রিট্রিভ করার জন্য IDistributedCache ব্যবহৃত হয়েছে। এটি Distributed Cache হিসেবে Redis সিস্টেম ব্যবহার করছে।


৩. ক্যাশিং টেকনিকস নির্বাচন করা

  • In-memory caching ব্যবহার করা উচিত যখন:
    • অ্যাপ্লিকেশন একটি সার্ভারে চালিত হয়।
    • দ্রুত অ্যাক্সেসের প্রয়োজন হয়, যেমন স্বল্প-মেয়াদী ক্যাশে।
  • Distributed caching ব্যবহার করা উচিত যখন:
    • অ্যাপ্লিকেশন একাধিক সার্ভারে চলে।
    • ক্লাস্টার বা মাইক্রোসার্ভিস আর্কিটেকচারে ডেটা শেয়ার করতে হয়।

৪. ক্যাশিংয়ের চ্যালেঞ্জ এবং সমাধান

  • Cache Eviction: ক্যাশে ডেটা কতক্ষণ থাকবে এবং কখন এটি মুছে ফেলা হবে, তা সঠিকভাবে কনফিগার করা উচিত। Redis এবং In-memory ক্যাশে উভয়েই LRU (Least Recently Used) পলিসি সমর্থন করে।
  • Data Consistency: ক্যাশে ডেটার সাথে ডাটাবেসের ডেটা সিঙ্ক্রোনাইজ করতে হবে, বিশেষত যখন ক্যাশে অ্যাপ্লিকেশনের জন্য অস্থায়ী ডেটা ধারণ করে। Cache Invalidation একটি সাধারণ কৌশল যা ব্যবহৃত হয়।

সারাংশ

In-memory caching এবং distributed caching হল পারফরম্যান্স টিউনিংয়ের গুরুত্বপূর্ণ অংশ। In-memory ক্যাশিং ছোট অ্যাপ্লিকেশনের জন্য আদর্শ, যেখানে Redis বা অন্যান্য distributed caching সল্যুশন একাধিক সার্ভার বা স্কেলড অ্যাপ্লিকেশনগুলোর জন্য অত্যন্ত কার্যকর। ক্যাশিংয়ের মাধ্যমে অ্যাপ্লিকেশন দ্রুত ডেটা সরবরাহ করতে পারে এবং সার্ভারের লোড কমিয়ে আসল ডেটা প্রসেসিংয়ের প্রয়োজনীয়তা কমায়।

Content added By
Promotion